package com.pg.entity.dd;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.hibernate.validator.constraints.Length;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * <p>
 * 生产订单
 * </p>
 *
 * @author likl
 * @since 2020-07-06
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class EipProductionOrder implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 全库唯一码
     */
    @NotNull(message = "全库唯一码不能为空")
    @Length(max = 64, message = "全库唯一码过长")
    @TableId
    private String puid;

    /**
     * 采购方总部编码
     */
    @NotNull(message = "采购方总部编码不能为空")
    @Length(max = 8, message = "采购方总部编码过长")
    @Excel(name = "采购方总部编码")
    @TableField("\"purchaserHqCode\"")
    private String purchaserHqCode;

    /**
     * 供应商编码
     */
    @NotNull(message = "供应商编码不能为空")
    @Length(max = 16, message = "供应商编码过长")
    @Excel(name = "供应商编码")
    @TableField("\"supplierCode\"")
    private String supplierCode;

    /**
     * 供应商名称
     */
    @NotNull(message = "供应商名称不能为空")
    @Length(max = 32, message = "供应商名称过长")
    @Excel(name = "供应商名称")
    @TableField("\"supplierName\"")
    private String supplierName;

    /**
     * 生产订单号
     */
    @NotNull(message = "生产订单号不能为空")
    @Length(max = 16, message = "生产订单号过长")
    @Excel(name = "生产订单号")
    @TableField("\"ipoNo\"")
    private String ipoNo;

    /**
     * 母单号
     */
    @Length(max = 16, message = "母单号过长")
    @Excel(name = "母单号")
    @TableField("\"pIpoNo\"")
    private String pIpoNo;

    /**
     * 国网侧推送给供应商，用于供应商挂接采购订单行项目或销售订单号
     */
    @NotNull(message = "采购订单行项目或销售订单号不能为空")
    @Length(max = 512, message = "采购订单行项目或销售订单号过长")
    @Excel(name = "采购订单行项目或销售订单号")
    @TableField("\"poItemId\"")
    private String poItemId;

    /**
     * 默认为1；
     * 1：关联采购订单行项目；
     * 2：关联销售订单行项目
     * 注意：当为dataType=1时，poItemId为采购订单行项目Id。
     * 当dataType=2时，poItemId为销售订单号。
     */
    @NotNull(message = "关联方式不能为空")
    @Length(max = 8, message = "关联方式过长")
    @Excel(name = "关联方式")
    @TableField("\"dataType\"")
    private String dataType;

    /**
     * 当dataType=1时非必填。
     * 当dataType=2时必填
     */
    @Length(max = 512, message = "采购订单行项目Id或销售订单号过长")
    @Excel(name = "采购订单行项目Id或销售订单号")
    @TableField("\"soItemNo\"")
    private String soItemNo;

    /**
     * 订单类型
     */
    @NotNull(message = "订单类型不能为空")
    @Length(max = 8, message = "订单类型过长")
    @Excel(name = "订单类型")
    @TableField("\"ipoType\"")
    private String ipoType;

    /**
     * 品类编码
     */
    @NotNull(message = "品类编码不能为空")
    @Length(max = 8, message = "品类编码过长")
    @Excel(name = "品类编码")
    @TableField("\"categoryCode\"")
    private String categoryCode;

    /**
     * 种类编码
     */
    @NotNull(message = "种类编码不能为空")
    @Length(max = 8, message = "种类编码过长")
    @Excel(name = "种类编码")
    @TableField("\"subclassCode\"")
    private String subclassCode;

    /**
     * 排产计划编码
     */
    @Length(max = 16, message = "排产计划编码过长")
    @Excel(name = "排产计划编码")
    @TableField("\"scheduleCode\"")
    private String scheduleCode;

    /**
     * 厂家物料编码
     */
    @NotNull(message = "厂家物料编码不能为空")
    @Length(max = 32, message = "厂家物料编码过长")
    @Excel(name = "厂家物料编码")
    @TableField("\"materialsCode\"")
    private String materialsCode;

    /**
     * 厂家物料名称
     */
    @NotNull(message = "厂家物料名称不能为空")
    @Length(max = 64, message = "厂家物料名称过长")
    @Excel(name = "厂家物料名称")
    @TableField("\"materialsName\"")
    private String materialsName;

    /**
     * 厂家物资单位
     */
    @NotNull(message = "厂家物资单位不能为空")
    @Length(max = 16, message = "厂家物资单位过长")
    @Excel(name = "厂家物资单位")
    @TableField("\"materialsUnit\"")
    private String materialsUnit;

    /**
     * 厂家物料描述
     */
    @NotNull(message = "厂家物料描述不能为空")
    @Length(max = 64, message = "厂家物料描述过长")
    @Excel(name = "厂家物料描述")
    @TableField("\"materialsDesc\"")
    private String materialsDesc;

    /**
     * 生产数量
     */
    @NotNull(message = "生产数量不能为空")
    @DecimalMax(value = "255", message = "生产数量过长")
    @Excel(name = "生产数量")
    private BigDecimal amount;

    /**
     * 计量单位
     */
    @NotNull(message = "计量单位不能为空")
    @Length(max = 8, message = "计量单位过长")
    @Excel(name = "计量单位")
    private String unit;

    /**
     * 物资id分组
     */
    @Length(max = 32, message = "物资id分组过长")
    @Excel(name = "物资id分组")
    @TableField("\"productIdGrpNo\"")
    private String productIdGrpNo;

    /**
     * 物资id类型
     */
    @Length(max = 32, message = "物资id类型过长")
    @Excel(name = "物资id类型")
    @TableField("\"productIdType\"")
    private String productIdType;

    /**
     * 产品型号
     */
    @Length(max = 16, message = "产品型号过长")
    @Excel(name = "产品型号")
    @TableField("\"productModel\"")
    private String productModel;

    /**
     * 计划开始日期
     */
    @NotNull(message = "计划开始日期不能为空")
    @Excel(name = "计划开始日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("\"planStartDate\"")
    private Date planStartDate;

    /**
     * 计划完成日期
     */
    @NotNull(message = "计划完成日期不能为空")
    @Excel(name = "计划完成日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("\"planFinishDate\"")
    private Date planFinishDate;

    /**
     * 实际开始日期
     */
    @Excel(name = "实际开始日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("\"actualStartDate\"")
    private Date actualStartDate;

    /**
     * 实际完成日期
     */
    @Excel(name = "实际完成日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd")
    @TableField("\"actualFinishDate\"")
    private Date actualFinishDate;

    /**
     *生产工厂id
     */
    @Length(max = 16, message = "生产工厂id过长")
    @Excel(name = "生产工厂id")
    @TableField("\"plantId\"")
    private String plantId;

    /**
     *生产工厂编码
     */
    @Length(max = 16, message = "生产工厂编码过长")
    @Excel(name = "生产工厂编码")
    @TableField("\"plantCode\"")
    private String plantCode;

    /**
     * 生产工厂名称
     */
    @Length(max = 32, message = "生产工厂名称过长")
    @Excel(name = "生产工厂名称")
    @TableField("\"plantName\"")
    private String plantName;

    /**
     * 生产车间id
     */
    @Length(max = 16, message = "生产车间id过长")
    @Excel(name = "生产车间id")
    @TableField("\"workshopId\"")
    private String workshopId;
    /**
     * 生产车间编码
     */
    @Length(max = 16, message = "生产车间编码过长")
    @Excel(name = "生产车间编码")
    @TableField("\"workshopCode\"")
    private String workshopCode;

    /**
     * 生产车间名称
     */
    @Length(max = 32, message = "生产车间名称过长")
    @Excel(name = "生产车间名称")
    @TableField("\"workshopName\"")
    private String workshopName;

    /**
     * 生产订单状态
     */
    @Length(max = 8, message = "生产订单状态过长")
    @Excel(name = "生产订单状态")
    @TableField("\"ipoStatus\"")
    private String ipoStatus;

    /**
     * 生产中心
     */
    @Length(max = 16, message = "生产中心过长")
    @Excel(name = "生产中心")
    private String center;

    /**
     * 工艺路线编码
     */
    @Length(max = 64, message = "工艺路线编码过长")
    @Excel(name = "工艺路线编码")
    @TableField("\"processRouteNo\"")
    private String processRouteNo;

    /**
     * 工艺路线
     */
    @Length(max = 32, message = "工艺路线过长")
    @Excel(name = "工艺路线")
    @TableField("\"processRoute\"")
    private String processRoute;

    /**
     * 产品型号规格
     */
    @Length(max = 64, message = "产品型号规格过长")
    @Excel(name = "产品型号规格")
    @TableField("\"modelSpec\"")
    private String modelSpec;

    /**
     * 数据来源
     */
    @NotNull(message = "数据来源不能为空")
    @Excel(name = "数据来源")
    @TableField("\"dataSource\"")
    private String dataSource;

    /**
     * 来源数据创建时间
     */
    @NotNull(message = "来源数据创建时间不能为空")
    @Excel(name = "来源数据创建时间")
    @TableField("\"dataSourceCreateTime\"")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dataSourceCreateTime;

    /**
     * 数据拥有方
     */
    @Length(max = 32, message = "数据拥有方过长")
    @Excel(name = "数据可见方")
    @TableField("\"ownerId\"")
    private String ownerId;

    /**
     * 数据可见方
     */
    @Length(max = 32, message = "数据可见方过长")
    @Excel(name = "数据可见方")
    @TableField("\"openId\"")
    private String openId;

    /**
     * 逻辑删除
     */
    @Length(max = 1, message = "逻辑删除过长")
    @Excel(name = "逻辑删除")
    @TableField("\"isDeleted\"")
    private String isDeleted;

    /**
     * 更新时间
     */
    @Length(max = 32, message = "更新时间过长")
    @Excel(name = "更新时间")
    @TableField("\"ModifyTime\"")
    private String ModifyTime;

    /**
     * 状态表示
     */
    private String ioflag;

    /**
     * 错误信息
     */
    private String message;

    /**
     * 本条数据是新增/更新
     */
    private String status;

    /**
     * 全局流水号
     */
    private String transno;

    /**
     * 预留字段1
     */
    private String remark1;

    /**
     * 预留字段2
     */
    private String remark2;

    /**
     * 预留字段3
     */
    private String remark3;

    /**
     * 预留字段4
     */
    private String remark4;

    /**
     * 预留字段5
     */
    private String remark5;


}
